11.10 仮想メモリページ保護の応用
ダブルマッピング
同一ページを2つの異なるアドレスに異なる保護でマップする一般的手法
例を用いた説明
to 空間不変条件を持つインクリメンタルコピーコレクタを考える
未処理のページ内の from 空間へのポインタをミューテータが参照するのを防ぎたい
コレクタがそれらのページを非アクセスにし、実質的にハードウェアにサポートされたリードバリアを作成可能
ではページを処理するコレクタについては?
システムが並行的でコレクタがページ保護を解除するならば、コレクタが処理するより先に別のミューテータがその内容を見てしまうかもしれない
保護はアドレスに対して一律に行われている(コレクタとミューテータの区別はしない)
そのページをもう一度別の場所に読み書きアクセスでマップすればよい
コレクタはこの2回目のマッピングによりその内容を処理し、その後ページ保護を解除してミューテータを起こせる